/**
 * 统一错误处理文件
 * axios 是Vue推荐的请求工具, 相关使用访问的文档地址: https://github.com/mzabriskie/axios
 */
function addInterceptors(instance) {
  instance.defaults.timeout = 8000;
  instance.defaults.withCredentials = true;

  const errorMap = {
    400: '请求失败',
    401: '未授权',
    403: '禁止访问',
    404: '地址未找到',
    499: '未登陆',
  };

  // 返回结果拦截器,处理默认的错误
  instance.interceptors.response.use((response) => {
    // status=200
    if (response.data.code && response.data.code !== 200) {
      // code!=200时的全局提示
      this.$Message.error({
        content: 'code: ' + response.data.code + '，' + response.data.msg,
        duration: 5,
      });
    } else {
      return response.data ? response.data : response; // 自动截取response对象
    }
  }, function(error) {
    // 非200响应时的错误处理
    const res = error.response.data; // 响应data
    const status = error.response.status; // 响应状态吗
    const message = res.msg || (res.errors && res.errors[0].message); // 错误消息

    // 全局以Notice组件的形式提示错误
    this.$Notice.error({
      title: errorMap[status] || '未知错误',
      desc: message,
      duration: 5,
    });

    return Promise.reject(error);
  });
}

export default addInterceptors;
